home *** CD-ROM | disk | FTP | other *** search
/ Aminet 37 / Aminet 37 (2000)(Schatztruhe)[!][Jun 2000].iso / Aminet / dev / cross / Avr.lha / Atmel / Asm / examples / tune.asm < prev    next >
Assembly Source File  |  1999-10-10  |  2KB  |  105 lines

  1. ;Example code which plays a tune on the output compare pin of AT90S
  2. ;device, running with an 8MHz crystal.
  3.  
  4.  .include "/includes/io2313.h"
  5.  
  6. ; Equates for each musical note, eg o2a is octave 2, A
  7.  
  8. o2a  equ 142
  9. o2b  equ 127
  10. o2c  equ 120
  11. o2d  equ 107
  12. o2e  equ 95
  13. o2f  equ 89
  14. o2fs equ 87      ;F#
  15. o2g  equ 80
  16. o3a  equ 71
  17. o3b  equ 63
  18. o3c  equ 60
  19. o3d  equ 53
  20. o3e  equ 48
  21. o3f  equ 45
  22. o3g  equ 40
  23.  
  24.                 ;Output compare pin, output.
  25.  sbi DDRB,3
  26.  
  27.  ldi R16,$40
  28.  out TCCR1A,R16     ;Toggle OC pin on compare (Piezo).
  29.  
  30.  ldi R16,$0B         ;00001100    clear counter on match, clk/8
  31.  out TCCR1B,R16
  32.  
  33. RESTART:
  34.  ldi R30,(TUNE*2)&255    ;Load the start of the lookup table into Z (R30, R31)
  35.  ldi R31,(TUNE*2)>8
  36.  
  37.  clr R16
  38. L1:
  39.  out OCR1AH,R16       ;Delay between notes.
  40.  out OCR1AL,R16
  41.  ldi R18,50
  42. L3:                 ;Short software delay.
  43.  dec R18
  44.  brne L3
  45.  dec R19
  46.  brne L3
  47.  
  48.  lpm                  ;Get note from lookup table, store in R0.
  49.  ld  R1,Z+           ;Just increment Z by 1
  50.  mov R17,R0
  51.  cpi R17,0
  52.  breq RESTART       ;If the note was 0, end of tune.
  53.  lpm               ;Get note duration.
  54.  ld R1,Z+
  55.  mov R20,R0
  56.  
  57.  clr R18           ;clear the counter
  58.  out TCNT1H,R18
  59.  out TCNT1L,R18
  60.  
  61.  out OCR1AH,R16   ;Load in new note
  62.  out OCR1AL,R17
  63.  
  64. L2:            ;note delay
  65.   dec R18
  66.   brne L2
  67.   dec R19
  68.   brne L2
  69.   dec R20
  70.   brne L2
  71.  
  72.   rjmp L1
  73.  
  74. ; Tune lookup table.
  75.  
  76. TUNE:               ;Note, Duration
  77.      .db o2d,7
  78.      .db o2c,7
  79.      .db o2b,10
  80.      .db o2d,10
  81.      .db o2d,10
  82.      .db o2d,10
  83.      .db o2e,10
  84.      .db o2d,20
  85.      .db o2c,10
  86.      .db o2b,15
  87.      .db o2d,5
  88.      .db o2g,15
  89.      .db o3a,5
  90.      .db o3b,25
  91.      .db o3b,10
  92.      .db o3b,10
  93.      .db o2d,10
  94.      .db o2d,10
  95.      .db o3b,10
  96.      .db o3b,10
  97.      .db o3a,20
  98.      .db o2g,10
  99.      .db o2fs,15
  100.      .db o2g,7
  101.      .db o3a,15
  102.      .db o3b,7
  103.      .db o3a,20
  104.      .db 0      ;end marker
  105.